【New!】AWS Database Migration Serviceに拡張モニタリングが追加されました
こんにちは。まるとです。
現地時間2024/9/19、AWS Database Migration Serviceにモニタリングタスクをはじめとしたメトリクスを可視化したダッシュボード「拡張モニタリング (Enhanced monitoring)」が追加されました。
早速実際に試していきたいと思います。
流れ
ダッシュボードを確認するために実際にAWS Database Migration Serviceを用いてデータベースの移行を行なっていきます。
今回はAmazon EC2上に検証用にPostgreSQLを構築し、Amazon RDS for PostgreSQLに移行していきたいと思います。
ざっくりとした流れは以下の通りです。
- Amazon EC2上に移行元、Amazon RDS上に移行先となるPostgreSQLを構築する(本番環境の場合はすでに移行元となるDBがあると思いますが、検証のために新たに構築します。)
- データ移行のために、レプリケーションインスタンス、エンドポイント、データベース移行タスクを作成する
- 移行の状態をEnhanced monitoringを用いて確認する
やってみる
それでは早速やってみましょう。なお、流れ1のDB構築はEnhanced monitoringを使う、という趣旨からは少し離れるので割愛します。
なお、今回はDBにテストデータを投入するために以下のSQLを実行しました。
-- testTableという名前のテーブルを作成
CREATE TABLE testTable (
id Integer PRIMARY KEY, -- idカラムは整数型
name VARCHAR(255) -- nameカラムは可変長文字列型
);
-- 1000件のランダムなレコードをtestTableに追加
INSERT INTO testTable (id, name)
SELECT
gs AS id, -- generate_seriesからの連番
CONCAT('Name_', FLOOR(RANDOM() * 10000)::int) AS name -- 'Name_'に続くランダムな数値を持つ文字列
FROM generate_series(1, 1000) AS gs; -- 1から1000までのランダムな値を生成
上記のSQLを実行すると以下のようなテーブルが作成されます。
id | name
------+-----------
1 | Name_7005
2 | Name_9559
3 | Name_5801
4 | Name_1103
5 | Name_7574
(続く)
ちなみに上記のSQLは弊社の生成AI環境構築サービス「AI-Starter」が社内向けに使えるので、良い感じにSQLを作ってもらいました。
AI-Starterについて気になる方は以下もご確認ください。
データ移行を実施する
AWS Database Migration Serviceでデータの移行を行うには、流れでも記載した通り、
- レプリケーションインスタンス
- エンドポイント
- データベース移行タスク
が必要となります。それぞれ簡単に見ていくと、レプリケーションインスタンスはデータベース移行タスク自体を処理するマシン(Amazon EC2インスタンスなど)、エンドポイントはデータストアの出入り口、データベース移行タスクは名前の通りではございますが、データ移行の実行単位となります。
それでは実際にやっていきましょう。
サブネットグループの作成
上記には記載していないのですが、レプリケーションインスタンスをどこに配置するかを定義する「サブネットグループ」を最初に作成する必要があります。
Amazon RDSでMulti-AZ配置をする時に設定するのと同じです。
レプリケーションインスタンスの作成
続いて、データベース移行タスクを実行するレプリケーションインスタンスを作成します。
サーバーレスレプリケーションもできますが、今回は元からあるレプリケーションインスタンスを作成していきます。
AWS DMSサイドバーにある「レプリケーションインスタンス」を押下して、「レプリケーションインスタンスの作成」を押下します。
設定値は今回、以下を指定します。
分類 | 項目名 | 値 |
---|---|---|
インスタンスの設定 | インスタンスクラス | dms.t3.micro |
エンジンバージョン | DBに適したバージョン | |
レプリケーションインスタンスのための | 開発またはテストワークロード (シングルAZ) | |
ストレージ | 割り当てられたストレージ (GiB) | 20 |
接続とセキュリティ | ネットワークタイプ | IPv4 |
IPv4 用仮想プライベートクラウド (VPC) | サブネットグループを作成したVPC | |
レプリケーションサブネットグループ | 前述の手順で作成したサブネットグループ | |
パブリックアクセス可能 | チェックなし |
エンジンバージョンは以下のドキュメントを元に選択します。
上記の設定で作成後、しばらくするとステータスが利用可能になります。
これでレプリケーションインスタンスの準備は完了です。
ソースエンドポイントの作成
続いて、データストアの出入り口となるソースエンドポイントを作成していきます。
まずは移行元となるDBからのエンドポイントを作成します。
エンドポイントを作成するにはAWS DMSサイドバーにある「エンドポイント」を押下して、「エンドポイントの作成」を押下します。
設定値は次のとおりです。
分類 | 項目名 | 値 |
---|---|---|
エンドポイントタイプ | ソースエンドポイント | |
エンドポイント設定 | ソースエンジン | PostgreSQL |
エンドポイントデータベースへのアクセス | アクセス情報を手動で提供する | |
サーバー名 | FQDNまたはIPアドレス | |
ポート | 5432 | |
ユーザ名 | DBに接続時のユーザ名 | |
パスワード | ユーザ名に対応するパスワード | |
Secure Socket Layer (SSL) モード | なし | |
データベース名 | 移行対象データベース名 |
なお、レプリケーションインスタンスが利用可能なステータスの場合、「エンドポイント接続のテスト (オプション)」から実際に接続できるか確認することができます。
エンドポイントを作成後、ステータスがアクティブになればOKです。
ターゲットエンドポイントの作成
続いて、データストアの出口(移行先側)ターゲットエンドポイントを作成していきます。
同じく、エンドポイントの作成から行います。
分類 | 項目名 | 値 |
---|---|---|
エンドポイントタイプ | ターゲットエンドポイント | |
エンドポイント設定 | ソースエンジン | PostgreSQL |
エンドポイントデータベースへのアクセス | アクセス情報を手動で提供する | |
サーバー名 | Amazon RDSのエンドポイント | |
ポート | 5432 | |
ユーザ名 | DBに接続時のユーザ名 | |
パスワード | ユーザ名に対応するパスワード | |
Secure Socket Layer (SSL) モード | なし | |
データベース名 | Amazon RDS上に作成したデータベース名 |
最終的にソース側とターゲット側の2つのエンドポイントが作れたら、準備OKです。
データベース移行タスクの作成
それでは実際にデータベースの移行を実施して、その状況を拡張モニタリングで確認していきます。
サイドバーのデータベース移行タスクから、タスクの作成を押下します。
また、タスクの設定値は次のようにします。
分類 | 項目名 | 値 |
---|---|---|
タスクの設定 | レプリケーションインスタンス | 作成したレプリケーションインスタンス |
ソースデータベースエンドポイント | 作成したソースデータベースエンドポイント | |
ターゲットデータベースエンドポイント | 作成したデータベースエンドポイント | |
移行タイプ | 既存のデータを移行する | |
タスク設定 | 編集モード | ウィザード |
ソーストランザクションのカスタム CDC 停止モード | カスタム CDC 停止モードを無効にする | ||
ターゲット DB で復旧テーブルを作成 | チェックなし | |
ターゲットテーブル準備モード | ターゲット上のテーブルを削除 | |
フルロードの完了後にタスクを停止する | 停止しない | |
LOB 列設定 | 制限付き LOB モード | |
最大 LOB サイズ (KB) | 32 | |
データ検証 | オフにする | |
CloudWatch ログの有効化 | チェックなし | |
テーブルマッピング | 選択ルール | 新規に作成し、スキーマ「スキーマの入力」を押下後、デフォルト値を使用 |
バッチ最適化の適用を有効化 | チェックなし | |
移行前評価 | 移行前評価を有効化 | チェックなし |
移行タスクのスタートアップ設定 | 移行タスクを開始 | 作成時に自動的に行う |
それでは実際にタスクを作成して動かしてみます。
拡張モニタリング(Enhanced monitoring)を見る
それでは実際にサイドバーにあるEnhanced monitoringからダッシュボードを確認してみましょう。
次のようなものが確認できます。
- 移行元のネットワーク帯域幅
- 移行元の1秒あたりの読み取り行数
- 移行先のネットワーク帯域幅
- 移行先への1秒あたりの書き込み行数
- レプリケーションインスタンスのCPU使用率
- レプリケーションインスタンスのメモリ使用率
- レプリケーションインスタンスのストレージ使用量
- (サーバーレスレプリケーションのみ)CPU割り当て数
- (サーバーレスレプリケーションのみ)メモリ割り当て量
終わりに
今回新たに帯域幅などを確認することができるようになったことで、移行状況をより詳細に確認することができるようになりました。
進捗状況上は◯◯%だけど、実際どのくらいの速度で進んでいるんだろう?といったユースケースであったり、トラブル発生時や移行速度がよくない場合などにどこがボトルネックになっているのか、などをより原因特定しやすくなったのではないかと思います。
また、特別な設定をしなくてもAWSマネジメントコンソールから簡単に確認ができるようになったので、運用・監視の面では凄くありがたい機能追加なのではないかと思います。